# Программирование на Python. Уровень 2. Объектно - ориентированное программирование

## Модуль 1. Введение  (1,5 ак. ч.)

* Знакомство.
* Цели и Задачи курса.
* Расписание занятий.
* Установка PyCharm.
* Знакомство со средой разработки и настройка.

## Модуль 2. Основы ООП  (6,5 ак. ч.)

* Понятия ООП: полиморфизм, инкапсуляция, абстракция и наследование.
* Понятие класса, объекта, экземпляра.
* Атрибуты и методы класса.
* Ссылочная модель Питона, класс и экземпляр как объекты.
* Практикум. Реализация своих типов данных с помощью классов.

## Модуль 3. Инкапсуляция и доступ к содержимому класса  (8 ак. ч.)

* Создание своих классов, как новых типов данных.
* Создание атрибутов и методов у новых типов данных.
* Сокрытие: Доступ к атрибутам и методам.
* Приватные атрибуты и mangling.
* Практикум. Начало работы над сквозным проектом.
* Проектирование и реализация консольных игр.

## Модуль 4. Полиморфизм  (4 ак. ч.)

* Суть полиморфизма.
* Специальные методы.
* Методы отображения: str, repr.
* Поведение контейнера, последовательности, итерируемость.
* Практическая работа. Создание итератора.

## Модуль 5. Функциональное программирование  (4 ак. ч.)

* Функция как объект.
* Функциональное программирование, функции map, filter, reduce.
* Замыкание.
* Лямбда-функция.
* Практикум. Продолжение работы над сквозным проектом.

## Модуль 6. Функции декораторы  (4 ак. ч.)

* Понятие декоратора.
* Создание функций-декораторов.
* Вызываемые экземпляры.
* Создание классов-декораторов.
* Практикум. Создание своей функции декоратора.

## Модуль 7. Отношения между классами  (4 ак. ч.)

* Виды отношений между классами.
* Отношение "Агрегация".
* Отношение "Композиция".
* Практическая работа. Продолжение работы над сквозным проектом.

## Модуль 8. Наследование  (6 ак. ч.)

* Композиция классов.
* Наследование. Иерархия классов.
* Функция super().
* Множественное наследование на примере Mixin классов.
* MRO, функция isinstance, issubclass.
* Практикум. Реализация иерархии классов через наследование.

## Модуль 9. Абстракция  (2 ак. ч.)

* Понятие интерфейса. Абстрактные классы.
* Декораторы модуля abc.
* Примеры реализации требований определенному интерфейсу.
* Подведение итогов по сквозному проекту.

